/**
 * 方式1：利用sort，通过随机产生true和false乱序
 * @param {*} arr
 * @returns
 */
function sortFn(arr) {
  return arr.sort(() => {
    return Math.random() - 0.5;
  });
}

/**
 * 通过随机hash，就是每次从数组随机取一个，然后从剩下的再随机取，知道数组清空
 * @param {*} arr
 */
function sortHash(arr) {
  if (!Array.isArray(arr)) return;

  let _arr = [...arr];

  let result = [];

  while (_arr.length) {
    let len = _arr.length;
    // | 位或运算，只要一个为1返回1， 偶数|1返回加1，如4|1=5, 奇数不变，小数一样，4.5|1=5，3.5|1=3
    // 1|0=1，1.2|0=1，相当于向下取整
    let hash = (len * Math.random()) | 0;

    let current = _arr.splice(hash, 1)[0];
    result.push(current);
  }

  return result;
}

// egg 用数字代表函数
let arr = [1, 2, 4, 5, 6, 7, 8];
console.log("[ sortFn(arr) ] >", sortFn(arr));
console.log("[ sortFn(arr) ] >", sortHash(arr));
